Use the basic steps in algorithmic problem-solving to design solutions (e.g., problem statement and exploration, examination of sample instances, design, implementing a solution, testing, and evaluation).
The students should be able to use algorithmic problem-solving skills to design a solution for a given problem. This strategy consists of six steps: reading and comprehending the problem statement, selecting theoretical concepts that could be applied, describing the problem qualitatively, formalizing a solution strategy, testing the solution, and evaluating the effectiveness of the solution. They should then be able to discuss their solution with their classmates.
An algorithm is essentially a series of instructions used to complete a
task. Because computers cannot make decisions without a set of clear instructions, all computers need
algorithms to complete tasks. Every computer program is made up of algorithms.
People unknowingly use algorithms in many everyday situations. When you wake up in the morning and
follow a set routine, you are essentially executing the steps of an algorithm you designed to
prepare you for the day. Other examples of algorithms include recipes, procedures, and instructions.
Designing algorithms helps students to think logically and critically about problems and challenges them
to design solution. Students should also learn how to use symbols to represent these algorithms because
this will help students communicate complex ideas.
Algorithms teach us to think critically about how we approach problems in our life: Are our strategies for completing tasks efficient and logical? Are we devoting too much time to a certain task? Is there a better strategy we could use? Students will benefit from implementing problem-solving processes in their future careers and everyday lives.
Describe the process of parallelization as it relates to problem solving.
Students should understand the concepts behind parallelization, the use of two or more processors (e.g., cores, computers) in combination to solve a single problem. Normally a computer must complete tasks in order and one at a time. To increase the speed at which processes can be completed, parallel computing can be implemented. Parallel computing aims to break down processes into discrete parts that different cores of a processor can work on at the same time.
Parallel computing is when we have a process that needs to do multiple tasks at the same time. We can use the different cores of a processor to work on different tasks at the same time. Normally, instructions would be carried out in sequence, one at a time. Parallelization is the process of dividing the process up into tasks that can be accomplished at the same time, so that the computer does not need to wait as long to move on.
Students will benefit from an understanding of breaking down a problem into different parts and distributing the work evenly amongst a team. This will increase teamwork and understanding of similarities between how humans process tasks and how computer process tasks.
Represent data in various ways (e.g., numbers, text, pictures) and use visual representations of problems and data.
Students should be able to read and represent data in a variety of ways (e.g., text, sounds, pictures, and numbers), and use different visual representations of problems, structures, and data (e.g., graphs, charts, network diagrams, flowcharts).
We collect data from samples, organize this data using graphs and charts, and then utilize statistical reasoning to make conclusions about an entire population. Data is an important part of statistics.
Students will benefit from an ability to express ideas in a multitude of visual representations. Students will also gain the ability to interpret various visual representations. Students can make and interpret graphs and flowcharts to integrate in math, science, and English courses. Students will also gain an appreciation for evaluation of data.
Understand the notion of hierarchy and abstraction in computing including high-level languages, translation, instruction set, and logic circuits.
Students should understand that hierarchies are a very common structure in computer software. For
example, file systems provided by operating systems have a top-level directory that contains
sub-directories such as "Program Files" and "Documents and Settings". These sub-directories often
contain their own sub-directories.
Abstraction is a method of representing concepts, systems, or problems in a way that hides the complex,
in-depth details to emphasize the main idea.
(
source[1])
Abstraction: Computers at a hardware level are only able to understand binary expressions, and all data
(e.g., numbers, characters) has to be represented using binary. The exact method a computer uses to
store this data does not affect the user; therefore, this technical information is hidden from users.
This an example of abstraction. Computer scientists often use abstraction when writing programs.
For example, a programmer could create a program that pulls a file from the internet. Perhaps another
programmer is working on her own project that allows users to draw on pictures from the internet.
She could incorporate that code into her project to pull pictures from the internet and then write the
code for drawing on the pictures by herself. If the first programmer wrote his code well, his
implementation would be abstracted, meaning the second programmer would not need to understand all the
technical details about how the first programmer's code works to incorporate it into her own code
project.
Hierarchy: Many modern programming languages allow programs to be built from objects,
which are collections of pieces of data and functions to interact with that data. An example
object could be called motor-vehicle, which would contain all things common to motor vehicles,
such as an engine, and functions to interact with the motor vehicle, such as start() and
drive(). The issue is that motor-vehicle will not contain variables for elements that are
not common to all motor vehicles, such as doors or the number of wheels. To fix this, programming
languages allow for the creation of objects such as car or motorcycle which inherit all of
the attributes of motor-vehicle but also include data specific to themselves. The relationship
between these types of objects is hierarchical.
If someone asked you to go see a movie with them and you told them that you could not because you had to grade papers, you would be using a form of abstraction. When you said you had to grade papers, you left out all of the small details. Instead of saying that you needed to check every answer on the quizzes against the answer key, mark down the score for each quiz, and enter those scores into the gradebook. You simply abstracted all of those actions into a single action called “grading” because all of the details were not of importance to the “end user” or, your friend who asked you to go see a movie.
We will use a math teacher as an example of abstraction and hierarchy. All math teachers at a school are teachers, and all teachers are employees. The hierarchy would look like this: employee → teacher → math teacher. The school might have a requirement that says all employees need to have a bank account set up for direct deposit. However, the specific requirements for a math teacher also include “Prepare students for the math portion of standardized tests”. Even though all math teachers will need to have a bank account set up, we leave those requirements out from the math teacher’s requirements, and allow it to be handled by the employee level of the hierarchy. We do not put the math teacher’s requirements in the teacher or employee level because not all employees need to prepare students for the math portion of standardized tests.
Students are able to determine small steps in a large process. This could be applied to large projects or homework assignments as students will be able to recognize small progresses leading to a goal. Students will also be able to visualize the complexities of a large system via its parts.
Demonstrate interdisciplinary applications of computational thinking and interact with content-specific models and simulations to support learning and research.
Students should be able to apply the principles of computational thinking to interdisciplinary subjects. They should be able to interact with content-specific models and simulations to support learning and research of any subject.
Computational thinking is a set of problem-solving methods that involve expressing problems and their solutions in ways that a computer could execute. Even something as simple as reflecting back on an experience multiple times can be considered computational thinking because it is both retrospective and recursive.
Students will gain the knowledge of how computers are involved in almost every discipline. This will be helpful to students in using computers in other courses to create reports or projects. Computational thinking can make other areas of STEM more approachable.